#day_001
#   1\数据序列（容器），字符串str,列表list，元组tuple,字典dict，集合set,重点记忆它们的作用和方法
##字符串##
#   2\字符串 3\字符串的容器下标（索引） 4\字符串的切片 5\字符串的find()方法
#   6\字符串的替换方法replace()7\字符串的拆分方法split() 8\字符串的连接join


# 字符串
str1 = '小五'
str2 = "小五"
str3 = """小五"""
str4 = '''小五'''
print(type(str1),type(str2),type(str3),type(str4))
str5 = "i'm 小五"
str6 = 'i\'m 小五'
str7 = 'i\\\'m 小五'
# 原生字符串 在字符串的前边 加上r"",字符串中的\就不会进行转义
str8 = r'i\'m 小五'
str9 = r'i\\\'m 小五'
print(str5)
print(str6)
print(str7)
print(str8)
print(str9)

# 下标 容器：字符串，列表，元组
# 用法：容器[下标]
str_001 = 'abcdefg'

print(str_001[0])
print(str_001[6])
print(str_001[-7])
print(str_001[-1])

# 切片，可以一次性获取容器中的多个数据（多个数据的小标是等差数列）
# 语法 容器[start:end:step]
# start 表示开始位置的下标，取的到
# end 表示结束位置的下标，但取不到
# step 步长，表示的意思就是相邻两个坐标的差值
# start,start+step,start+start*2,...,end(取不到）

my_str = 'abcdefg'

print(my_str[0:3:1]) #abc
print(my_str[0:3]) #步长是1,可以省略不写 abc
print(my_str[:3]) #开始下标是0（取第一个字符），可省略数字 abc
print(my_str[4:7]) #efg
print(my_str[4:]) #取最后一个字符，end可以不写 efg
print(my_str[::2]) #aceg
print(my_str[2:6:3]) #cf
# 特殊情况，步长为-1，这个负号可以理解为反转（逆序）字符串
str = my_str[::-1]  #   跟列表一样,原str不变,会得到新的str
print(my_str)
print(str) #gfedcbg
print(my_str[::-2]) #geca

# 字符串.find(sub_str)     在字符串中 查找是否存在 sub_str 这样的字符串
# 返回值（这行代码执行的结果）：
# 1,如果存在sub_str,返回 第一次出现 sub_str 位置的下标
# 2,如果不存在sub_str,返回 -1

my_str_001 = '黑马程序员'
my_str_01  ='黑马'    #'白马'->不存在
result = my_str_001.find(my_str_01)
if result == -1:
    print(f'{my_str_01}不存在')
else:
    print(f'{my_str_01}存在,下标位置为:',result)

# 字符串.replace(old,new,count) 将字符串中的 old 字符串 替换为 new 字符串
# old 原字符串,被替换的字符串
# new 新字符串,要替换为的字符串
# count 一般不写,表示全部替换,可以指定替换的次数
# 返回:会返回一个替换后的完整的字符串
# 注意:原字符串不会改变

my_str_002 = 'good good study'
#将good换为GOOD

my_str_02 = my_str_002.replace('good','GOOD')
print('my_str_002:',my_str_002)
print('my_str_02',my_str_02)

# 将第一个good替换成Good
my_str_003 = my_str_002.replace('good','Good',1)
print('my_str_003:',my_str_003)

#将第二个 good 替换为 Good
# 先整体替换为 Good,再将替换后的 第一个Good 替换为 good
my_str3 = my_str_002.replace('good','Good').replace('Good','good',1)
print('my_str3:',my_str3)

# 字符串.split(sep)    将字符串按照指定的字符串 sep 进行分隔.(sep可以不写,按照空格分隔)
# 返回:   列表[],列表中的每个数据就是分隔后的字符串

str11 = 'hello Python\tand itcast and\nitheima'
# 返回值都是列表类型[]
# 默认 按照空格字符分隔
list1 = str11.split()   #['hello', 'Python', 'and', 'itcast', 'and', 'itheima']
print(list1)
# 按照 空格分隔
list2 = str11.split(' ')    #['hello', 'Python\tand', 'itcast', 'and\nitheima']
print(list2)
# 按照and分隔
list3 = str11.split('and')  #['hello Python\t', ' itcast ', '\nitheima']
print(list3)

# 字符串.join(容器) 这里的容器一般是列表[],将字符串插入到列表相邻的两个数据之间,组成新的字符串
# 注意点: 列表中的数据 必须都是字符串才可以

list01 = ['hello', 'Python', 'and', 'itcast', 'and', 'itheima']
# 将列表中的数据使用 空格 组成新的字符串
str111 = ' '.join(list01)   # hello Python and itcast and itheima
print(str111)
# 使用 逗号 连接
str222 = ','.join(list01)   # hello,Python,and,itcast,and,itheima
print(str222)
# 使用*连接
str333 = '*'.join(list01)   # hello*Python*and*itcast*and*itheima
print(str333)